package kr.pe.johnkim.checkmileage.mobile.rest.service;

import kr.pe.johnkim.checkmileage.mobile.domain.CheckMileageMember;

/**
 * Check Mileage 사용자 관련 Service 기능들을 정의하는 인터페이스 이다.
 *
 * @author : johnkim <cale9797@gmail.com / Bettersoft, Inc.>
 * @Date : 12. 7. 25
 */
public interface CheckMileageMemberService {

    /**
     * 아이디로 기존에 등록된 사용자가 있는지 확인 한다.
     *
     * @param checkMileageMember
     * @return
     */
    public CheckMileageMember selectMemberExist(CheckMileageMember checkMileageMember);

    /**
     * 사용자를 등록 한다.
     *
     * @param checkMileageMember
     */
    public void registerMember(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * 사용자 정보를 가져 온다.
     *
     * @param checkMileageMember
     * @return
     */
    public CheckMileageMember selectMemberInformation(CheckMileageMember checkMileageMember);

    /**
     * 사용자 정보를 수정 한다.
     *
     * @param checkMileageMember
     */
    public void updateMemberInformation(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * 사용자를 비활성화 한다.
     *
     * @param checkMileageMember
     */
    public void updateDeactivateMember(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * 사용자의 Google GCM Registration Id / APNS Device Token 을 수정 한다.
     *
     * @param checkMileageMember
     */
    public void updateRegistrationId(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * Push Notification 수신 여부를 수정 한다.
     *
     * @param checkMileageMember
     */
    public void updateReceiveNotification(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * 사용자 위치 정보를 수정 한다.
     *
     * @param checkMileageMember
     */
    public void updateMemberLocation(CheckMileageMember checkMileageMember) throws Exception;

    /**
     * 전화번호로 기존 사용자가 있는지 확인 한다.
     *
     * @param checkMileageMember
     * @return
     */
    public CheckMileageMember selectMemberExistByPhoneNumber(CheckMileageMember checkMileageMember);

    /**
     * 전화번호로 기존 사용자 정보를 가져 온다.
     *
     * @param checkMileageMember
     * @return
     */
    public CheckMileageMember selectMemberInformationByPhoneNumber(CheckMileageMember checkMileageMember);
}
